#pragma once

#pragma managed

#include "..\BWAPI\Unit.h"
#include "..\BWTA\BaseLocation.h"
#include "Base.h"

using namespace System::Collections::Generic;
using namespace BroodWar::Api;
using namespace BroodWar::Api::Enum;
using namespace BroodWar::Terrain;

namespace BroodWar
{
	namespace Addon
	{
		public interface class IBaseManager
		{
			void OnFrame();
			void OnUnitDestroy(Unit^ unit);
			Base^ GetBase(BaseLocation^ location);

			Base^ ExpandNow();
			Base^ ExpandNow(BaseLocation^ location);
			Base^ ExpandNow(BaseLocation^ location, bool getGas);
			Base^ ExpandWhenPossible();
			Base^ ExpandWhenPossible(BaseLocation^ location);
			Base^ ExpandWhenPossible(BaseLocation^ location, bool getGas);
			Base^ ExpandAtFrame(int frame);
			Base^ ExpandAtFrame(int frame, BaseLocation^ location);
			Base^ ExpandAtFrame(int frame, BaseLocation^ location, bool getGas);

			property HashSet<Base^>^ ActiveBases { HashSet<Base^>^ get(); }
			property HashSet<Base^>^ ReadyBases { HashSet<Base^>^ get(); }
			property HashSet<Base^>^ AllBases { HashSet<Base^>^ get(); }
			property HashSet<Base^>^ DestroyedBases { HashSet<Base^>^ get(); }
			
			property String^ Name { String^ get(); }
		};
	}
}
